iT邦幫忙

2024 iThome 鐵人賽

DAY 13
1
IT 管理

30天從版控到code review的實踐指南系列 第 13

Day 13. Git 操作入門:實作自動化加Release 版號(GitHub Actions)-下篇。

  • 分享至 

  • xImage
  •  

客製的 Release Notes


應用情境:希望能依據 Pull Request 標題來自動生成 Release Notes,標題為 semantic-release 的版本號,並將內容至少分類為 featurefix 兩類。

  • 目標

    • 分析 commit messages 並決定版本號:使用 @semantic-release/commit-analyzer。
    • 根據 commit messages 生成 Release Notes:@semantic-release/release-notes-generator。
    • 自動生成 GitHub Release Notes,且定義 Release Notes 的標題為版本號。
    • 更新 Changelog 並 push 到 GitHub:@semantic-release/changelog 和 @semantic-release/git。
  • 實作:在專案根目錄下,新增 release.config.js(或 .releaserc),以 release.config.js 為例:

    {
      "branches": ["main"],
      "plugins": [
        [
          "@semantic-release/commit-analyzer",
          {
            "preset": "angular",
            "releaseRules": [
              { "type": "feat", "release": "minor" },
              { "type": "fix", "release": "patch" },
              { "type": "docs", "release": false },
              { "type": "style", "release": false },
              { "type": "refactor", "release": "patch" },
              { "type": "perf", "release": "patch" },
              { "type": "test", "release": false },
              { "type": "*", "release": false }  // 所有其他類型,歸到 "Others"
            ]
          }
        ],
        [
          "@semantic-release/release-notes-generator",
          {
            "preset": "angular",
            "presetConfig": {
              "types": [
                { "type": "feat", "section": "Features" },
                { "type": "fix", "section": "Fixes" },
                { "type": "refactor", "section": "Refactors" },
                { "type": "perf", "section": "Performance Improvements" },
                { "type": "docs", "section": "Documentation" },
                { "type": "style", "section": "Code Style Updates" },
                { "type": "test", "section": "Tests" },
                { "type": "*", "section": "Other Changes" }
              ]
            }
          }
        ],
        "@semantic-release/changelog",
        "@semantic-release/git",
        [
          "@semantic-release/github",
          {
            "release": {
              "name": "Release version ${nextRelease.version}"
            }
          }
        ]
      ]
    }
    
  • 說明

    • @semantic-release/commit-analyzer:用於分析 commit messages,根據設定的 releaseRules 決定是升級 minor 還是 patch 版本。
    • @semantic-release/release-notes-generator:根據 commit messages 生成 Release Notes,並在 Release Notes 中區分 Features、Fixes、Refactors…等。
    • @semantic-release/changelog:自動更新 CHANGELOG.md 文件。
    • @semantic-release/git:自動將變更 push 到 GitHub(包括 CHANGELOG.md 的變更)。
    • @semantic-release/github:自動生成 GitHub Release Notes,並自定義 Release 的標題為版本號 ${nextRelease.version}
  • 注意事項

    • release.config.js(或 .releaserc):應該放在專案的根目錄下,當 GitHub Actions 觸發並執行 semantic-release 時,會自動在專案根目錄下尋找 release.config.js.releaserc 文件來進行版本號處理與生成 Release Notes。

Summary


透過使用 semantic-release 和 GitHub Actions,自動化發布版本號、生成 Release Notes 以及提交 CHANGELOG.md 能大大提升開發流程效率,確保程式碼變更後可被清楚記錄並發布到 GitHub。此外,還可以根據專案需求客製化 Release Notes 的規則,靈活定義變更類別及內容格式。


上一篇
Day 12. Git 操作入門:實作自動化加Release 版號(GitHub Actions)-中篇。
下一篇
Day 14. Clean Code 介紹:易讀性、可維護性、團隊效率。
系列文
30天從版控到code review的實踐指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言